let id = 0;
class Dep{
    constructor(){
        this.id=id++;//属性的dep要收集watcher
        this.subs = [];//这里存放着当前属性对应的watcher
    }
    depend(){
        //如果index.html中使用到两次{{name}} 就会重复收集 所以不能无脑push
        //不希望放重复的watcher 而且只是一个单向的关系
        //watcher记录dep 作用：后续我们实现计算属性 和一些清理工作 组件卸载
        // this.subs.push(Dep.target);
        Dep.target.addDep(this);//让watcher记住dep
        //dep和watcher是一个多对多的关系
        //一个属性可以在多个组件中使用dep->多个watcher
        //一个组件中由多个属性组成(一个watcher对应多个dep)
    }
    addSub(watcher){
        this.subs.push(watcher);
    }
    notify(){
        this.subs.forEach(watcher=>watcher.update());//告诉watcher要更新了
    }
}
Dep.target = null;

let stack = [];
export function pushTarget(watcher){
    stack.push(watcher);
    Dep.target = watcher;
}
export function popTarget(){
    stack.pop();
    Dep.target = stack[stack.length -1];
}

export default Dep;